package com.demo.jdkproxy;

import com.demo.proxy.Car;
import com.demo.proxy.Moveable;

import java.lang.reflect.Proxy;

public class Test {
    public static void main(String[] args) {
        /**
         * loader 类加载器
         * interfaces 实现接口
         * h InvocationHandler
         *
         * 动态代理实现思路
         * 实现功能: 通过Proxy的newProxyInstance返回代理对象
         * 1.声明一段源码(动态产生代理)
         * 2.编译源码(JDK Compiler API), 产生新的类(代理类)
         * 3.将这个类load到内存中, 产生一个新的对象(代理对象)
         * 4.return 代理对象
         */
        Moveable moveable = (Moveable) Proxy.newProxyInstance(Car.class.getClassLoader(), Car.class.getInterfaces(), new TimeHandler(new Car()));
        moveable.move();
    }
}
